home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr37 / list224.zip / LISTSERV.DOC < prev    next >
Text File  |  1995-03-13  |  25KB  |  519 lines

  1.  
  2. Listserv v2.24 (03/13/95) - by Pete Nelson
  3. Terminal One BBS (510) 689-9528
  4. Author: pete@terminal-one.com
  5.  
  6.  
  7. Listserv is a wcCODE application that will let you run Internet mailing
  8. lists from your Wildcat BBS.  Subscription and unsubscription requests are
  9. handled automatically, either via the list address or a listserv@ address.
  10. Different types of mailing lists are supported: open, closed, authorized
  11. users only, etc.  
  12.  
  13.  
  14. * What is a listserv? *
  15.  
  16. A listserv is a program that runs mailing lists on Internet.  People send
  17. e-mail to the listserv address, and the listserv program sends that e-mail
  18. out to the other subscribers.  The Listserv .WCX works in the same manner.
  19. People send e-mail to the address you set up, and when you run the Listserv
  20. program, it sends out the messages to the subscribers.  Listserv will only 
  21. send and receive messages in the conference you specify in the configuration
  22. file, which must be your conference for Internet e-mail.  Do not set up
  23. a conference in Makewild or wcGATE for your mailing list.  From what I can 
  24. tell, it won't work.  wcGATE was only written to handle incoming messages 
  25. from a mailing list, and wasn't designed to host one.  If MSI is smart, 
  26. they'll add this feature to wcGATE so I won't have to work on Listserv 
  27. anymore, although it is kinda fun!  :)
  28.  
  29.  
  30.  
  31. * Installation *
  32.  
  33. Listserv can be run as an event, but can also be set up as a menu choice for
  34. the sysop to run at his/her discretion.  You need to copy the following files
  35. into your main Wildcat directory:
  36.  
  37.  
  38. LISTSERV.WCX - Compiled Listserv program.  Set this up as a menu option for 
  39. the sysop or as an event.  This is the program that checks and processes your
  40. Internet mailing lists.
  41.  
  42.  
  43. LISTUTIL.WCX - Utility to let to add/view/remove mailing lists, and to
  44. add/drop/view subscribers to those lists.  Run this only as a menu option.
  45.  
  46.  
  47. LISTSERV.CFG - Contains the number for your Internet E-Mail conference.
  48. Put the conference number on the first line.
  49.  
  50.  
  51. LISTSERV.PTR - Stores the high message pointer for your Internet E-Mail
  52. conference, default is 0.  Be SURE to change this number when you first
  53. install or when you renumber your Internet e-mail database, as it could
  54. drastically affect your mailing list.
  55.  
  56.  
  57. LISTSERV.DAT - Stores info on all the mailing lists you host.  This will 
  58. not be present in the ZIP file.  It will be created when you make your 
  59. first mailing list.
  60.  
  61.  
  62. LISTSERV.FLT - Filter file:  This file, if it exists, can be used to filter
  63. out certain lines on outgoing messages.  It should contain the exact text of 
  64. the line you want filtered out.  This file need only exist if you have
  65. problems with messages looping back to your mailing list address. Be SURE 
  66. you have NO EXTRA CARRIAGE RETURNS or your outgoing messages will be very 
  67. compact, since Listserv will filter out the carriage returns on the messages.  
  68. Here's an example of what might be in the file, with the (Line x) not actually
  69. being in the file:
  70.  
  71. (Line 1)  To: wildcat-l@terminal-one.com
  72. (Line 2)  To: aliens-l@terminal-one.com
  73. (Line 3 is the EOF marker)
  74.  
  75. Again, having no extra carriage returns is VERY IMPORTANT!  I have done some
  76. testing and the filters seem to work.
  77.  
  78.  
  79. LISTSERV.LOG - Listserv's log file.  This is added to every time Listserv 
  80. runs.  It will give you some stats on the messages sent out and the messages
  81. that were skipped.
  82.  
  83.  
  84. LISTSERV.HLP - Custom Help File.  If a message is send to LISTSERV with a
  85. subject of 'HELP', this file will be sent back if it exists.  You can put
  86. anything you want in this file, such as a list of the mailing lists you host
  87. or commands that are used to subscribe to your mailing lists.
  88.  
  89.  
  90.  
  91. * Creating a new Mailing List with Listutil *
  92.  
  93.  
  94. The first thing you need to do is run Listutil and create your first mailing
  95. list.  Choose the option to Create a new Mailing List.  
  96.  
  97. First it will ask you for the name of your mailing list.  Choose a name
  98. that is suited to your mailing list.  I run a Wildcat mailing list, so I
  99. called mine Wildcat-L.  Type in the name of your mailing list, minus your
  100. domain name.
  101.  
  102. It will then ask you for the file name to use.  Let me explain how the
  103. file naming works.  Suppose you ran a mailing list called WILDCAT-L, and 
  104. the file name was WILDLIST.  Your file names for that mailing list 
  105. would be:
  106.  
  107. WILDLIST.DAT - Subscriber list, binary file
  108. WILDLIST.ADD - Message sent to new subscribers
  109. WILDLIST.DRP - Message sent to people that unsubscribe
  110. WILDLIST.SIG - Signature added to outgoing messages on the mailing list
  111. WILDLIST.NOT - Message sent to people that try to post on the mailing list
  112.                when they're not a subscriber or they're not authorized to
  113.                post on that list
  114. WILDLIST.CLS - Message send on a closed list to users that try to subscribe
  115.                automatically
  116. WILDLIST.LST - List of users authorized to post on the mailing list.  MUST
  117.                exist for type 5 and 6 mailing lists.  It does not affect 
  118.                types 1 through 4.
  119.  
  120.  
  121. Every file for that mailing list is based on the main file name.  Listserv
  122. will automatically create the .DAT file for you when someone subscribes or
  123. you add a subscriber.  The other files are standard text files you can
  124. create.  If the .ADD, .DRP, .NOT, .CLS  or .SIG files are not present, then 
  125. that message or .SIG will not be sent.
  126.  
  127. Listserv supports six types of mailing lists:
  128.  
  129.      1) Automatic subscriptions, anyone can post
  130.      2) Automatic subscriptions, must subscribe to post
  131.      3) Must e-mail host to subscribe, anyone can post
  132.      4) Must e-mail host to subscribe, only subscribers can post
  133.      5) Automatic subscriptions, must be authorized to post
  134.      6) Must e-mail host to subscribe, must be authorized to post
  135.  
  136. For type 5 and 6 lists, you MUST create a .LST file.  This is is an ASCII
  137. file, and on each line of the file you would list the addresses that
  138. are authorized to post on that list.  Example:
  139.  
  140. Pete Nelson
  141. pete@terminal-one.com
  142. president@whitehouse.gov
  143.  
  144.  
  145. A name without a domain name (Pete Nelson) would be your user name on the
  146. BBS.  This way you can post locally to your own mailing list.
  147.  
  148.  
  149. You will also need to make a user account for each mailing list so incoming
  150. messages don't get bounced back.  Make sure this account has full access to
  151. your Internet e-mail conference.  Give the account name the same name as your
  152. mailing list, minus your domain name.  Example:  If the mailing list address
  153. is WILDCAT-L@TERMINAL-ONE.COM, make a user called WILDCAT-L
  154.  
  155. Also, be sure to create an account for the LISTSERV@ address.  The easiest 
  156. way to make these accounts is to do so through wcPRO or the User Database
  157. in the Sysop Menu.
  158.  
  159.  
  160.  
  161. * Adding or Dropping subscribers manually *
  162.  
  163. Run Listutil, and choose the option to Add Subscribers or Drop Subscribers.
  164. Enter the name of the mailing list, then enter the address you wish to add
  165. or remove.  When dropping a subscriber, you can type in a partial name
  166. and Listutil will find a match on that name.  You will be asked to verify
  167. the address when adding and dropping subscribers.
  168.  
  169.  
  170.  
  171. * Removing a Mailing List *
  172.  
  173. Run Listutil and choose the option to Remove a Mailing List.  Enter the
  174. name of the mailing list you wish to remove.  
  175.  
  176. *NOTE* When you Remove a Mailing List via Listutil, it does not delete the
  177. data files the list was using.  You need to delete the files manually if you
  178. remove a mailing list, otherwise the files remain in case you removed a list
  179. accidentally.
  180.  
  181.  
  182. * Moderating a mailing list *
  183.  
  184. Listutil has a feature that will let you scan the message database for any
  185. unprocessed mailing list messages.  Listutil will check from the last time
  186. Listserv was ran.  It will check each message to see if its for the 
  187. 'listserv' address or one of your mailing lists.  If it is, it will display
  188. a short message header and the message body.  You are then given an option
  189. to delete the message or go on to the next unprocessed message.  Hitting 
  190. [ENTER] for the default answer will go on to the next message.  Once the
  191. message is deleted, Listserv will skip over that message when it runs.
  192. This is how you can moderate your mailing lists!
  193.  
  194.  
  195.  
  196. * Subscribing/unsubscribing from the mailing lists. *
  197.  
  198. Users who wish to sign up to the mailing list should send e-mail to the
  199. list (ex: wildcat-l@terminal-one.com) and use for the subject either
  200. the word 'subscribe' or 'unsubscribe'. 
  201.  
  202. Users may also send e-mail to listserv@domain.name.com 
  203. (ex: listserv@terminal-one.com).  In the body of the message, they can put
  204. their subscription requests in as 'subscribe listname' or 
  205. 'unsubscribe listname'.  Be sure that you do not put your username as part
  206. of the command.  If you do, Listserv will not recognize it.  This is the 
  207. recommended way of subscribing/unsubscribing to the mailing lists.
  208.  
  209.  
  210.  
  211. * Special Info on using wcPACK *
  212.  
  213. Right now, Listserv uses the number stored in the pointer file to file to find
  214. the next message to check, but wcPACK can cause this to become incorrect.  I
  215. will have to add support so it checks the high message number for the current
  216. conference for the mailing list account (WILDCAT-L, for example).  That way
  217. the high message number will get updated when wcPACK does its high message
  218. number update.  I also need to find out how to access the high message numbers
  219. in a user account through wcCODE.  MSI Support will have to help me with this
  220. one, cause I can't find anything in the docs that say how.  So for now, if
  221. you want your mailing list to work correctly, don't use wcPACK on your 
  222. Internet e-mail conference.  You may also want to check the high message
  223. pointers before you run Listserv.  I currently run it as an option on my
  224. sysop menu, and I always check things before I run it.
  225.  
  226. Author's Note:  I've found that using wcPACK on the Internet e-mail 
  227. conference generally does not cause problems when running with Listserv.
  228. However, I would do some testing to be sure, and I always run wcPACK on
  229. my Internet e-mail conference manually.
  230.  
  231.  
  232. * Bounced Messages *
  233.  
  234. One of the problems with running a mailing list is what to do with the 
  235. bounced or rejected messages.  I had been adding support to have Listserv
  236. look for certain subjects (HOST UNKNOWN, WARNING FROM UUCP, UNDELIVERABLE).
  237. With the release of v2.03, Listserv skips messages sent by non-subscribers.
  238. None of the Postmaster, UUCP, mail daemons or other automatic mail handlers 
  239. on different hosts are usually signed up to a mailing list, therefore any 
  240. returned messages from them are skipped!  
  241.  
  242.  
  243. * Listserv Data Records *
  244.  
  245. It occurred to me that I should post the records for the data strutcures 
  246. so other coders out there can write utilities for Listserv if they needed to.  
  247. Here they are, including remark lines so you may cut and paste:
  248.  
  249.  
  250. // This is the data type for the list of subscribers of each list
  251. // The 'name' would be the e-mail addresses of the subscriber
  252.  
  253. type sublist_rec
  254.      name as string*70
  255. end type
  256.  
  257. // This is the data type for the master list of mailing lists
  258. // found in LISTSERV.DAT.  The 'name' would be the name of the mailing
  259. // list address (ex: wildcat-l).  The 'subfile' would be the set of
  260. // data files used by that mailing list (ex: WILDLIST.DAT, WILDLIST.SIG,
  261. // WILDLIST.ADD, etc)
  262. // The type would be the list type, specified as 1 through 6.  This was 
  263. // added with the v2.20 release on 2-8-95
  264.  
  265. type list_record
  266.      name as string*70
  267.      subfile as string*8
  268.      type as integer
  269. end type
  270.  
  271. // End of data types for Listserv
  272.  
  273.  
  274. * I am currently hosting/testing a Wildcat mailing list.  Please send e-mail *
  275. * to 'listserv@terminal-one.com' with the words 'subscribe wildcat-l' in the *
  276. * body of the message.  I also run a Listserv mailing list, and I suggest    *
  277. * you sign up for this as well.  I use that mailing list to send out the new *
  278. * versions of Listserv.  Sign up using 'subscribe listserv-distrib' in the   *
  279. * message body.                                                                      *
  280.  
  281.  
  282. If there is anything missing in the docs, please tell me!  Writing
  283. documentation is not my strong point, and if I'm leaving something out then
  284. I'd like to get it added.
  285.  
  286.  
  287.  
  288. * Registration *
  289.  
  290. This wcCODE program is free, and does not require registration, although I 
  291. would like you to send me an e-mail to tell me that you are using it and what
  292. you think of it.
  293.  
  294.   Send e-mail to: pete@terminal-one.com
  295.  
  296. If you really feel like paying me, I'll be more than happy to accept your 
  297. donations!  Please mail them to:
  298.  
  299.  
  300.                          Pete Nelson
  301.                          640 Bailey Rd. #109
  302.                          Pittsburg, CA 94565
  303.  
  304.  
  305. When you register, you will receive a LISTSERV.KEY file via e-mail. Just place
  306. this file in the same directory as the rest of the Listserv files, and each 
  307. time you run Listserv, you will be reminded of your gracious contribution 
  308. to a fellow sysop.  :)
  309.  
  310.  
  311.  
  312. * Revision History *
  313.  
  314. v2.24 - (03/13/95) When a message is sent out on the mailing list, Listserv
  315.         will send a confirmation message back to the author of the original
  316.         message.  The format of the message is:
  317.            Your message 'This is the subject' was sent out to 
  318.            LISTNAME on 03/13/95 at 01:45:23 pm.
  319.       - When Listserv receives a message addressed to LISTSERV with a
  320.         subject of 'help', it will send back a file called LISTSERV.HLP if
  321.         it exists.  You can put anything in here that you want, such as a
  322.         list of your mailing lists, how to subscribe, etc.
  323.       - Fixed a very minor bug in Listutil
  324.       - Listutil will now display the total number of subscribers when 
  325.         listing or searching a subscriber list.
  326.       - The rebuild function in Listutil now trims any leading or trailing
  327.         spaces off the subcribers mailing address.  I noticed some e-mail
  328.         addresses were being added with a leading space and it was annoying
  329.         me, so I changed it.  :)
  330.    
  331. v2.23 - (03/01/95) Now creates a LISTSERV.LOG file that shows the message
  332.         counts each time Listserv runs.
  333.       - Added an option in Listutil to rebuild a mailing list subscriber
  334.         file.
  335.       - New computers at work - wcCODE compiles and runs really fast on a 
  336.         Pentium 90!
  337.  
  338. v2.22 - (02/10/95) Added the ability to the Moderate function to edit
  339.         the message body or subject
  340.  
  341. v2.22 - (02/09/95) Added a feature to Listutil that will search for 
  342.         messages that have not been processed by Listserv.  It will
  343.         check each message to see if it is addressed to 'listserv' or
  344.         one of your mailing lists.  If it is, it will show you a message
  345.         header as well as the body of the message.  You are then given an
  346.         option to delete the message or to go on to the next message.
  347.         Once the message has been deleted, Listserv will skip over it 
  348.         when it runs.
  349.       - Thanks to MSI support, Listserv now does a different (correct) 
  350.         method of checking to see if a message has been deleted.  According
  351.         to the Addendum text, a flag of 200 signifies a deleted message.
  352.         So I tried using the FlagIsSet command to test for it, but didn't
  353.         have much luck.  Called MSI support.  They said the FlagIsSet command
  354.         is broken.  They said you can do this to test for a flag:
  355.              If (Msg.Flags and 0x0200) <> 0 Then Print "Flag is set."
  356.              If (Msg.Flags and 0x0200) = 0 Then Print "Flag is cleared."
  357.         This should work for any of the bit-masked flags you need to 
  358.         check!  Thanks MSI!      
  359.  
  360. v2.20 - (02/08/95) Listserv now supports six types of mailing lists!
  361.         These will be set up through Listutil.  Be sure to read the 
  362.         UPGRADE.DOC file!  Here are the new types of mailing lists:
  363.          (1)  Anyone can subscribe, anyone can post
  364.          (2)  Anyone can subscribe, only subscribers can post
  365.          (3)  Must e-mail host to subscribe, anyone can post
  366.          (4)  Must e-mail host to subscribe, only subscribers can post
  367.          (5)  Anyone can subscribe, must be authorized to post
  368.          (6)  Must e-mail host to subscribe, must be authorized to post
  369.         Listserv will send out a custom messgae for a type 3, 4 or 6 message
  370.         when someone tries to subscribe.  It will also send out a message
  371.         for a type 5 or 6 if an unauthorized person tries to post.
  372.       - Fixed a bug where Listserv would skip some messages to the LISTSERV
  373.         address when the Subject contained a subscribe or unsubscribe
  374.         message.  This should work more reliably now.
  375.       - (Wow... I've more than doubled the size of the code since v2.00!)
  376.  
  377. v2.13 - (02/06/95) Fixed a bug where Listserv would exit when someone that
  378.         was not a subscriber tried to send a message to the list.
  379.       - The "From: username@domain.com" that was added to each message has
  380.         been removed.  The incoming message header always has the From 
  381.         address anyways (unless you sent the message locally), so it was 
  382.         kind of redundant.
  383.       - Each message will now have a "Processed with Listserv v2.13", or
  384.         the current version number, added to the end
  385.  
  386. v2.12 - (01/30/95) Added support for a registration key file.  People that
  387.         register will now get a key file saying that they have a registered
  388.         copy of Listserv!
  389.       - LISTUTIL: As my wcCODE programming knowledge expands, I optimize my
  390.         code a little more.  All the Yes/No prompts in Listutil now use a 
  391.         standard one or two lines of code using InputYesNo, rather than the 
  392.         six or seven lines of code using an Inkey command I had been using.
  393.  
  394. v2.11 - (01/09/95) The first revision for the new year!
  395.         Added support for a custom message (LISTSERV.NOT) that is sent out
  396.         to people that try to send a message out on the mailing list when
  397.         they are not a subscriber.
  398.       - Fixed some spelling errors in the docs.  :)
  399.  
  400. v2.10 - (12/22/94) Modified the way Listserv does its displays so it runs 
  401.         smoother rather than "blocky", although it now runs slightly slower.
  402.         If this is a major problem I will change it back to its original
  403.         display method.
  404.       - LISTUTIL: A few minor bug fixes
  405.  
  406. v2.09 - (12/19/94) Fixed a bug where Listserv would send a blank message 
  407.         if no filter file existed.  This has been fixed, and why I didn't
  408.         catch this when I released v2.08 is beyond me!  Guess it was just
  409.         one of those days.  :)
  410.       - Released the data structures in the docs.
  411.       - LISTUTIL.WCX: Added an option to reset the high message pointer       
  412.  
  413. v2.08 - (12/12/94) Added a feature to let the sysop filter out certain text
  414.         on outgoing messages.  The optional file LISTSERV.FLT should contain 
  415.         the lines you want filtered out of outgoing messages.  See the
  416.         documentation in the above text on how it should be formatted.
  417.  
  418. v2.07 - (12/01/94) The feature to skip deleted messages added in v2.06 was
  419.         causing Listserv to skip all new imported messages.  This should now
  420.         be fixed.
  421.  
  422. v2.06 - (11/29/94) Listserv will now skips messages flagged as deleted.  This
  423.         way you can add some sort of basic moderation to your mailing list.
  424.       - Fixed a bug that would cause Listserv to start at the first message
  425.         if the last message pointer (in the LISTSERV.PTR file) was pointing
  426.         to a non-existent message.  Example: Say the last message was 870, 
  427.         and that message had been marked as deleted and wcPACK was run to 
  428.         remove it.  Message 870 no longer exists, so Listserv can't find it
  429.         and starts at the beginning of the list. 
  430.  
  431. v2.05 - (11/16/94) Listserv now supports a LISTSERV@ address.  Users can now
  432.         send a message to listserv@domain.name.com, and put the 
  433.         'subscribe listname' and 'unsubscribe listname' in the body of the
  434.         message.
  435.       - Fixed a bug that occasionally happened when Listserv reached the last
  436.         record in it's subscriber list and would hang if the last record was
  437.         blank.
  438.  
  439. v2.04 - (11/15/94) Not released due to a bug
  440.  
  441. v2.03 - (11/10/94) Messages sent by a non-subscriber are skipped and not
  442.         sent out on the mailing list.
  443.       - Fixed a bug where Listserv would send/process one message and then
  444.         exit.  
  445.  
  446. v2.02 - (10/31/94) Recompiled to work with Wildcat v4.01
  447.       - Messages with a subject of HOST UNKNOWN are now skipped
  448.       - Fixed a bug where Listserv was sending out messages with blank
  449.         subjects.  Listserv now skips such messages.
  450.  
  451. v2.01 - (10/7/94) Turned off the Pause prompt
  452.       - Messages with a subject of EXECUTION FAILED or a blank subject are
  453.         now skipped and not sent out on the mailing list
  454.  
  455. v2.00 - (10/6/94) Support for multiple mailing lists added!  Yeah!
  456.       - Custom messages for each mailing list
  457.       - Listutil now handles the support for adding/removing mailing lists
  458.       - When using Listutil, you can type in a full or partial name, and
  459.         it will come of with a match.  IE: WILD would find WILDCAT if it
  460.         existed.  This works in both the mailing list and subscriber areas.
  461.       - Messages with a subject of SUB or UNSUB are now treated as 
  462.         subscription/unsubscription requests.
  463.       - Listserv will change back to the original conference it was launched
  464.         from
  465.  
  466. v1.06 - (9-29-94) Messages that contain a subject of WARNING FROM UUCP, 
  467.         UNDELIVERABLE or UNKNOWN ADDRESS are skipped.  This way bounced
  468.         messages are not sent back out on the mailing list.
  469.       - Fixed a bug that would give a "file already open" error when 
  470.         an unsubscription request was immediately followed by a subscription
  471.         request.
  472.  
  473. v1.05 - (9-22-94) Messages with the a subject of SUB, UNSUB or blank are 
  474.         now considered invalid subscription requests.  A custom message is 
  475.         sent out (INVALSUB.MSG) when Listserv gets one of these messages.
  476.         (Thanks to steve.henry@ambassador.com for the suggestion)
  477.       - All messages sent out on the list now show the From name as the
  478.         mailing list name.  This makes it easier to send replies back to
  479.         the mailing list rather than the original sender.
  480.         (Thanks to sysop@guildnet.org for the suggestion)
  481.  
  482. v1.04 - (9-12-94) Fixed a bug that was causing wcGATE not to export 
  483.         the outgoing messages.  Here's what was happening: 
  484.         There is a field in the Message Header record called Network Name.
  485.         My Internet provider is Holonet, and I wrote a small WCX to have
  486.         it display all the Network Names in the messages in my Internet 
  487.         E-mail conf.  Well, all the ones that were imported said HOLONET, 
  488.         and all the local ones added by the system, straight Wildcat and not 
  489.         the wcCODE program, were blank.  When Listserv got a message from 
  490.         Internet, the Network Name was already set to HOLONET, and when it 
  491.         saved an outgoing message, the Network Name was still set to HOLONET,
  492.         hence wcGATE thinks that the message had already been imported so it
  493.         didn't export it again.  All I did was reset the Network Name to 
  494.         blank before the message was saved so wcGATE will export the message.  
  495.  
  496. v1.03 - Fixed a bug that was causing messages to be saved as public rather
  497.         than private.  All outgoing messages created are now private.  
  498.         (Thanks to Steve at MSI for sending me the message flags info!)
  499.       - Added support for custom messages that are sent when people subscribe
  500.         and unsubscribe from the list
  501.       - Added a utility that lets you add/drop/list subscribers in the 
  502.         mailing list.
  503.  
  504. v1.02 - Added support so users already signed up for the list cannot get 
  505.         signed up again
  506.       - Added/changed come of the colors
  507.       - Added support for a customizable tagline (.sig) for each message.
  508.       - Fixed a bug where it put the mailing list name as the "From" name
  509.       - Turned off the "More" prompt.
  510.  
  511. v1.01 - Sends a reply when you subscribe or unsubscribe from the list.
  512.       - Included in docs how to actually subscribe/unsubscribe to the 
  513.         mailing list!  Ooops, slight oversight.
  514.  
  515. v1.0 - Initial Release.
  516.  
  517.  
  518. I can't believe I've written so much documentation for this program!  :)
  519.